<?php 
	/*
	Autor:
	Fecha:
	*/
	include('lib/session.php');
	include('lib/data_acces.php');
	include('lib/constructor.php');
	include('lib/mysql.php');
	include('lib/paging.lib.php');
	include('sidebar.php');
	include('lib/motor_busqueda.php');
	
	class buscador
	{
		//funcion que muestra el formulario de busuqeda
		function busqueda_form($data_acces)
		{
			$tform = new template;
			$tform->set_template('lib/html/busqueda/busqueda.html');
			//$tform->show();
			return $tform->show();
		}
		//funcion que realiza la busqueda por palabras claves
		function buscar_oracion($data_acces)
		{
			$list='';
			$list.=buscador::busqueda_form($data_acces);
			$list.='<br /><br /><br />';
			
			$oracion=$_POST['oracion'];
			if($oracion != ''){
				$palabras = new motor;
				$resultado=$palabras->palabra_claves_cadena($data_acces, $oracion);
				$contenido = buscador::documento_doc_pdf($data_acces, $resultado);
			}
			else
			{
				$contenido='inserte una sentencia de palabras para buscar';
			}
			
			$tbuscar = new template;
			$tbuscar->set_template('lib/html/busqueda/resultados.html');
			$tbuscar->set_parameter('resultados', $contenido);
			$tbuscar->show();
			$list.= $tbuscar->show();
			
			return $list;
		}
		//funcion que encuentra todos los documentos en el sistema
		function documento_doc_pdf($data_acces, $oracion)
		{
			$list = '';
			$list_contenido = '<div class="table_big"><table><tr><th>Nombre del Archivo</th><th>Descarga</th></tr>';
			$cont = 0;
			
			//saca las lista de los archivos doc con las palabras encontradas
			$archivos_doc=buscador::lista_doc();
			//print_r($archivos_doc);
			if($archivos_doc != '' and is_array($archivos_doc)){
				for($i=0; $i < count($archivos_doc); $i++){
					$list_doc = buscador::buscar_doc($data_acces, $oracion, $archivos_doc[$i]['path_archivo'], $archivos_doc[$i]['nombre_archivo']);
					if(is_array($list_doc)){
						$list[$cont]['nombre_archivo']=$list_doc['nombre_archivo'];
						$list[$cont]['path_archivo']=$list_doc['path_archivo'];
						$list[$cont]['contador_archivo']=$list_doc['num_palabras'];
						$cont++;
					}
				}
			}
			//saca la lista de os archivos pdf con las palabras encontradas
			$archivos_pdf=buscador::lista_pdf();
			if($archivos_pdf != '' and is_array($archivos_pdf)){
				for($j=0; $j < count($archivos_pdf); $j++){
					$list_pdf = buscador::buscar_pdf($data_acces, $oracion, $archivos_pdf[$j]['path_archivo'], $archivos_pdf[$j]['nombre_archivo']);
					if(is_array($list_pdf)){
						$list[$cont]['nombre_archivo']=$list_pdf['nombre_archivo'];
						$list[$cont]['path_archivo']=$list_pdf['path_archivo'];
						$list[$cont]['contador_archivo']=$list_pdf['num_palabras'];
						$cont++;
					}
				}
			}
			//saca una lista de los los archivos txt con las palabras encontradas
			$archivos_txt=buscador::lista_txt();
			if($archivos_txt != '' and is_array($archivos_txt)){
				for($j=0; $j < count($archivos_txt); $j++){
					$list_txt = buscador::buscar_txt($data_acces, $oracion, $archivos_txt[$j]['path_archivo'], $archivos_txt[$j]['nombre_archivo']);
					if(is_array($list_txt)){
						$list[$cont]['nombre_archivo']=$list_txt['nombre_archivo'];
						$list[$cont]['path_archivo']=$list_txt['path_archivo'];
						$list[$cont]['contador_archivo']=$list_txt['num_palabras'];
						$cont++;
					}
				}
			}
			//ordena los archivos por el numero de palabras encontradas de mayor a menor
			if($list != '' and is_array($list)){
				for($d = 0; $d < count($list); $d++){
					for($h = $d; $h < count($list); $h++){
						$num1 = $list[$h]['contador_archivo'];
						$num2 = $list[$d]['contador_archivo'];
						if($num1 > $num2){
							$aux1 = $list[$d]['nombre_archivo'];
							$aux2 = $list[$d]['path_archivo'];
							$aux3 = $list[$d]['contador_archivo'];
							$list[$d]['nombre_archivo']=$list[$h]['nombre_archivo'];
							$list[$d]['path_archivo']=$list[$h]['path_archivo'];
							$list[$d]['contador_archivo']=$list[$h]['contador_archivo'];
							
							$list[$h]['nombre_archivo'] = $aux1;
							$list[$h]['path_archivo'] = $aux2;
							$list[$h]['contador_archivo'] = $aux3;
						}
					}
				}
			}
			if($list != ''){
				for($f = 0; $f < count($list); $f++){
					$list_contenido .= '<tr><td>'.$list[$f]['nombre_archivo'].'</td><td><a href="'.$list[$f]['path_archivo'].'">Descargar</a></td></tr>';
				}
			}else{
				$list_contenido .= '<tr><td colspan="2"><div class="message">No existe ningun archivo relacionado con la busqueda</div></td></tr>';
			}
			$list_contenido .= '</table></div>';
			return $list_contenido;
		} 
		//lista de documentos doc
		function lista_doc()
		{
			$list='';
			
			$cont = 0;
			$d = dir("documentos");
			$e='';
			while (false !== ($entrada1 = $d->read())) {
			   if(is_dir("documentos/".$entrada1) and $entrada1 != '.' and $entrada1 != '..')
			   {
				   $e = dir('documentos/'.$entrada1);
				   while (false !== ($entrada2 = $e->read()) and $entrada1 != '.' and $entrada1 != '..' ) {
					   if($entrada2 != '.' and $entrada2 != '..' and  ( false !== strpos($entrada2, '.doc') or false !== strpos($entrada2, '.docx'))){
					   		$list[$cont]['path_archivo'] = 'documentos/'.$entrada1.'/'.$entrada2;
							$list[$cont]['nombre_archivo'] = $entrada2;
					   		$cont++;
					   }
				   }
				   $e->close();
				}
				else
				{
					if($entrada2 != '.' and $entrada2 != '..' and  ( false !== strpos($entrada2, '.doc') or false !== strpos($entrada2, '.docx'))){
						$list[$cont]['path_archivo'] = 'documentos/'.$entrada1;
						$list[$cont]['nombre_archivo'] = $entrada1;
						$cont++;
					 }
				}
			}
			$d->close();

			//print_r($list);
			return $list;
		}
		//lista de documentos pdf
		function lista_pdf()
		{
			$list='';
			
			$cont = 0;
			$d = dir("documentos");
			$e='';
			while (false !== ($entrada1 = $d->read())) {
			   if(is_dir("documentos/".$entrada1) and $entrada1 != '.' and $entrada1 != '..')
			   {
				   $e = dir('documentos/'.$entrada1);
				   while (false !== ($entrada2 = $e->read()) and $entrada1 != '.' and $entrada1 != '..' ) {
					   if($entrada2 != '.' and $entrada2 != '..' and  ( false !== strpos($entrada2, '.pdf') or false !== strpos($entrada2, '.PDF'))){
					   		$list[$cont]['path_archivo'] = 'documentos/'.$entrada1.'/'.$entrada2;
							$list[$cont]['nombre_archivo'] = $entrada2;
					   		$cont++;
					   }
				   }
				   $e->close();
				}
				else
				{
					if($entrada2 != '.' and $entrada2 != '..' and  ( false !== strpos($entrada2, '.pdf') or false !== strpos($entrada2, '.PDF'))){
						$list[$cont]['path_archivo'] = 'documentos/'.$entrada1;
						$list[$cont]['nombre_archivo'] = $entrada1;
						$cont++;
					 }
				}
			}
			$d->close();
			
			return $list;
		}
		//lista de documentos pdf
		function lista_txt()
		{
			$list='';
			
			$cont = 0;
			$d = dir("documentos");
			$e='';
			while (false !== ($entrada1 = $d->read())) {
			   if(is_dir("documentos/".$entrada1) and $entrada1 != '.' and $entrada1 != '..')
			   {
				   $e = dir('documentos/'.$entrada1);
				   while (false !== ($entrada2 = $e->read()) and $entrada1 != '.' and $entrada1 != '..' ) {
					   if($entrada2 != '.' and $entrada2 != '..' and  ( false !== strpos($entrada2, '.txt') or false !== strpos($entrada2, '.TXT'))){
					   		$list[$cont]['path_archivo'] = 'documentos/'.$entrada1.'/'.$entrada2;
							$list[$cont]['nombre_archivo'] = $entrada2;
					   		$cont++;
					   }
				   }
				   $e->close();
				}
				else
				{
					if($entrada2 != '.' and $entrada2 != '..' and  ( false !== strpos($entrada2, '.txt') or false !== strpos($entrada2, '.TXT'))){
						$list[$cont]['path_archivo'] = 'documentos/'.$entrada1;
						$list[$cont]['nombre_archivo'] = $entrada1;
						$cont++;
					 }
				}
			}
			$d->close();
			
			return $list;
		}
		//funcion uqe realiza la busqueda dentro de un documento .doc
		function buscar_doc($data_acces, $oracion, $direccion, $nombre_archivo)
		{
			$list = '';
			$cont = 0;
			//print_r( $oracion );
			if(strpos(strtolower($direccion),strtolower('.docx')) === false){
				$word = new COM("word.application") or die ("Could not initialise MS Word object.");
				$word->Documents->Open(realpath($direccion));
				
				// Extract content.
				$contenido = (string) $word->ActiveDocument->Content;
				if(is_array($oracion)){
					for($i = 0; $i < count($oracion); $i++){
						if(strpos(strtolower($contenido),strtolower($oracion[$i])) !== false){
							$cont++;
							//echo $direccion;
							$list['path_archivo'] = $direccion;
							$list['nombre_archivo'] = $nombre_archivo;
							$list['num_palabras'] = $cont;
						}
					}
				}else{
					if(strpos(strtolower($contenido),strtolower($oracion)) !== false){
						$cont++;
						$list['path_archivo'] = $direccion;
						$list['nombre_archivo'] = $nombre_archivo;
						$list['num_palabras'] = $cont;
					}
				}
				$word->ActiveDocument->Close(false);
				
				$word->Quit();
				$word = null;
			}
			return $list;
		}
		//fucnion que realiza la busqueda en un documento en pdf
		function buscar_pdf($data_acces, $oracion, $direccion, $nombre_archivo)
		{
			$list='';
			
			return $list;
		}
		//fucnion que realiza la busqueda en un documento en pdf
		function buscar_txt($data_acces, $oracion, $direccion, $nombre_archivo)
		{
			$list = '';
			$cont = 0;
			$gestor = fopen($direccion, "r");
			$contenido = fread($gestor, filesize($direccion));
			
			if(is_array($oracion)){
				for($i = 0; $i < count($oracion); $i++){
					if(strpos(strtolower($contenido),strtolower($oracion[$i])) !== false){
						$cont++;
						$list['path_archivo'] = $direccion;
						$list['nombre_archivo'] = $nombre_archivo;
						$list['num_palabras'] = $cont;
					}
				}
			}else{
				if(strpos(strtolower($contenido),strtolower($oracion)) !== false){
					$cont++;
					$list['path_archivo'] = $direccion;
					$list['nombre_archivo'] = $nombre_archivo;
					$list['num_palabras'] = $cont;
				}
			}
			
			fclose($gestor);
			return $list;
		}
		//funcion que busca dentro del sistema sig
		function buscar_sig($data_acces, $oracion)
		{
			$list='';
			
			return $list;
		}
		//menus que genera la accion de cada boton
		function menu($data_acces)
		{
			$list='';
			$param=explode('/',$_GET['do'],5);
			$option=$param[0];
			switch($option){
				case 'buscar':
					$list=buscador::buscar_oracion($data_acces);
				break;
				default:
					$list=buscador::busqueda_form($data_acces);
			}
			return $list;
		}
		//funcion que muestra el menu de navegacion
		function menu_nav($data_acces)
		{
			$tmenu = new template;
			$tmenu->set_template('lib/html/navegation/navegation.html');
			$tmenu->show();
			return $tmenu->show();
		}
		//contenido del sidebar
		function sidebar($data_acces){
			$list='';
			$list.=sidebar::show_page($data_acces);
			return $list;
		}
		//function que estructura la pagina para ser mostrada
		function show_page($data_acces)
		{
			$tbuscador = new template;
			$tbuscador->set_template('lib/html/index.html');
			$tbuscador->set_parameter('nav_bar', buscador::menu_nav($data_acces));
			$tbuscador->set_parameter('content_page', buscador::menu($data_acces));
			$tbuscador->set_parameter('content_sidebar', buscador::sidebar($data_acces));
			return $tbuscador->show();
		}
	}
	
	$buscador=new buscador;
	echo $buscador->show_page($data_acces);
?>